package com.innovations;

import cn.hutool.core.net.NetUtil;
import java.util.LinkedHashSet;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.scheduling.annotation.Async;

/**
 * 监听应用启动完成后的事件处理类
 * @author dp
 * @date 2024-12-20
 */
@Slf4j
@Configuration(proxyBeanMethods = false)
public class StartEventListener {

    /**
     * 应用启动完成后执行的方法
     * 该方法异步执行，避免阻塞应用启动流程
     * 它监听WebServerInitializedEvent事件，即Web服务器初始化完成后的事件
     * 该方法主要用于日志输出，包括服务器端口、IP地址和版本信息
     *
     * @param event WebServerInitializedEvent事件，包含Web服务器的相关信息
     */
    @Async
    @Order
    @EventListener(WebServerInitializedEvent.class)
    public void afterStart(WebServerInitializedEvent event) {
        // 读取版本信息
//        VersionReader reader = new VersionReader();
//        List<VersionEntity> versionList = reader.readVersionFile("version.yaml");
        String versionMeg="";
//        // 如果存在版本信息，则排序并获取最新版本的信息
//        if (versionList.size() > 0) {
//            Collections.sort(versionList); // 按照版本号进行排序
//            versionMeg=versionList.get(0).toString();
//        }
        // 获取当前Web服务器的端口
        int localPort = event.getWebServer().getPort();
        // 日志输出应用启动完成的信息，包括端口、IP地址和版本信息
        log.info(" ------ 启动完成,服务地址: http:\\\\{}:{},服务版本号:{}----", NetUtil.getLocalhostStr(),localPort, versionMeg);

    }
}